package main

import (
	"fmt"
)

// 没有返回值
func f1() {
	fmt.Println("我是一个函数，没有返回值")
}

// 返回一个值,ret 可以省略--> func sum(a int, b int) (int){} 或者 func sum(a,b int) int{},相同类型可以简写
func sum(a int, b int) (ret int) {
	ret = a + b
	return ret
}

// 返回两个参数
func f2() (string, string) {
	return "tom", "jerry" //等价于 return,后面的可以省略
}
func calc(x, y int) (sum, sub int) {
	sum = x + y
	sub = x - y
	return
}

//go中经常会使用其中一个返回值作为函数是否执行成功，是否有错误信息的判断条件，例如：
//return value,exists;value,ok;value,err等
//返回值过多时，比如大于4个，返回值就会放到容器里：同类型放切片，不同类型放map里

// 可变参数
func f3(args ...int) {
	for i, j := range args {
		fmt.Println(i, j)
	}
}
func f5(name string, args ...int) {
	fmt.Println(name)
	for i, j := range args {
		fmt.Println(i, j)
	}
}

func main() {
	//函数调用
	f1()
	f2()
	f3(1, 2, 3, 4, 5, 6)
	f5("tom", 1, 2, 3, 4)

	a1 := sum(1, 2)
	fmt.Println(a1)
}
